Java web发展历史

web访问就是用户通过浏览器获取资源的过程,资源包含两种:静态资源与动态资源。

  • 静态资源,就是静态页面,html/css/jpg等,javascript可以实现页面上的显示动态,但这些是通过浏览器来展现的,和后端服务没有关系;
  • 动态资源,页面数据随着访问时间或访问人等不同而不同,需要后端处理参与的,可以支持用户交互,数据库交互等,jsp,asp,php等

静态资源通过访问web服务器就能返回,主流的web服务器有apache, nginx


但是web服务器处理不了动态资源。

Servlet是Sun公司提供的用于开发动态资源的技术,编程人员只需要继承HttpServlet类,重写doGet,doPost等方法就可以动态生成html用于浏览器展示。但是Servlet不能单独运行,需要借助web容器来实例化与调用。tomcat就是典型的web容器。用户开发自己的Servlet,打包成war包,部署在tomcat中。通过tomcat,通过定义的路径就可以访问servlet访问动态资源。

Servlet是由Java语言编写的,要在Servlet中返回html,就需要在Java代码中进行html的组装,在代码中不可避免的会出现一堆的string连接。这种方法不优雅,也不高效,更不方便维护。这时JSP应运而生。

jsp简单的可以理解为在html中增加对java代码的支持。而jsp本质上还是Servlet技术。当访问jsp时,jsp会被翻译成Java程序进行编译,而这个Java程序继承了HttpServlet,因此jsp其实就是一个Servlet。在这个Java程序中会将jsp中的Java代码复制过来,并组装html。

此时Java web的开发一般都是Servlet + Jsp模式,分得细些就是 Servlet + Jsp + JavaBean。这也是MVC模式的前期应用,其中Servlet是Controller, Jsp是View, JavaBean是Model。

一般的项目中既存在静态资源的访问,也有动态资源的需求,虽然Tomcat也可以用于静态资源访问,但是==Tomcat对静态资源的访问也是通过Servlet形式来的==,因此如果全部用tomcat作为web服务器,服务器的压力很大。因此常用的部署模式就是web服务器+web容器模式,比如nginx+tomcat,nginx用于静态资源的访问,tomcat用于动态资源访问。nginx还可以用于负载均衡。


Java与Sun社区还开发了一套更大的架构来满足企业级开发需求,除了Servlet与JSP,还有EJB、JMS、JDBC等,这些东西统称为Java EE。

但是Java EE远没有想的那么好,这套东西过于复杂与难用。技术的发展总是趋向傻瓜型,因此就有人不断的在此基础上去研究更好用更方便的框架,Spring就是其一,还有用于数据库交互的Mybatis等。另一方面,Jsp本质上是一个模板技术,一个HTML的模板,在运行时根据情况生成不同的HTML。类似的技术还有Velocity,Freemaker,Groovy等。这些技术有共同的缺点,那就是前后端技术融合在一起,对于前后端的维护与分工都不方便,当有更适合前后端分离的技术产生时,Jsp便慢慢没落了。这类技术包括JavaScript、AJAX、JQuery,RESTful等,时至今日,前后端已可以完全分离,当需要后端参与时,前端直接发请求获取json,并将数据组装在html中。

参考资料:

  • Java web学习总结
  • JSP:一个装配工的没落
  • Java EE的历史